import { defineStore } from 'pinia'
import {login,checkPhone,docheckcode,dosendmsgcode,dofinishregister} from '@/api/users'
export const useUserStore = defineStore('useUserStore',{
  state(){
    return {
      token:localStorage.getItem("token") || '',//登录
      userid:localStorage.getItem("userid") || '',//登录
      loginname:localStorage.getItem("loginname") || '',//注册
    }
  },
  actions:{
    //发送请求,组件调用这个login
    /* 
        async所修饰的函数
          1. async所修饰的函数中的返回值一定是一个promise的结果
            返回内容
              => 
                非promise
                  如果代码没有报错,那么返回的就是返回的值
                  如果代码有报错,那么就返回是就是失败的promises
                    失败的内容就是那个错误信息
              => 
                promise
                  如果返回一个成功的promise,那么得到就是一个成功的promise
                  如果返回一个失败的promise,那么得到就是一个失败的promise,失败的错误信息会报抛出
    */

    async loginHandler(values:{loginname:string,password:string}){
      //将手机号码存储进去
      this.loginname = values.loginname
      //数据持久化
      localStorage.setItem("loginname",values.loginname)
      // token和userId 要发送请求,拿到,存储到state里面去
      const result = await login(values)
      console.log(result);
      
      //将数据存储的state里面去
      /* 断言 */
      if((result as any).code == 200){
        //往state里面存储一份
        this.token = result.data.token
        this.userid= result.data.userid
        //往storage存储一份
        localStorage.setItem("token",result.data.token)
        localStorage.setItem("userid",result.data.userid)

        return Promise.resolve("登录成功")
      }else{
        return Promise.reject("登录失败")
      }
    },

    //判断账号是否已经被注册过了
    async checkPhoneHandler(params:{tel:string}){
      const result = await checkPhone(params)
      if((result as any).code == 200){
        //表示可以注册
        // 将手机号码存储到state里面去
        this.loginname = params.tel;
        //返回一个成功的promise
        return Promise.resolve(result)
      }else{
        //返回又给失败的promise
        return Promise.reject(result)
      }
    },
    
    //获取验证码
    async getCheckCode(params:{tel:string}){
      const result = await dosendmsgcode(params)
      if((result as any).code == 200){
        //返回一个成功的promise
        return Promise.resolve(result.data)
      }else{
        //返回又给失败的promise
        return Promise.reject(result.data)
      }
    },

    //校验验证码
    async checkCodeHandler(params:{tel:string,telcode:string}){
      const result = await docheckcode(params)
      if((result as any).code == 200){
        //返回一个成功的promise
        return Promise.resolve(result)
      }else{
        //返回又给失败的promise
        return Promise.reject(result)
      }
    },

    //完成注册
    async doRegisterHandler(params:{tel:string,password:string}){
      const result = await dofinishregister(params)
      if((result as any).code == 200){
        //返回一个成功的promise
        return Promise.resolve(result)
      }else{
        //返回又给失败的promise
        return Promise.reject(result)
      }
    },

    //退出登录
    logoutHandler(){
      this.token = ""
      this.userid = ""
      localStorage.removeItem("userid")
      localStorage.removeItem("token")
    }
  }
})
